#ifndef MESSAGESHOWAREA_H
#define MESSAGESHOWAREA_H

#include <QScrollArea>
#include <QByteArray>
#include <QLabel>
#include <QPushButton>
#include "model/data.h"
//.h文件中一般不能直接展开命名空间，所以使用哪个展开哪个
using model::Message;


///////////////////////////////////////////////////////////////
/// 消息对话滚动区域的实现
///////////////////////////////////////////////////////////////

class messageShowArea : public QScrollArea
{
    Q_OBJECT
public:
    messageShowArea();

    //尾插
    void addMessage(bool isLeft,const Message& message);
    void addFrontMessage(bool isLeft,const Message& message);
    void clear();

    //拉滚动条到末尾
    void scrollToEnd();
    //增加自己发送的消息


private:
    QWidget* container;
};

///////////////////////////////////////////////////////////////
/// 消息Item的实现
///////////////////////////////////////////////////////////////

class messageItem: public QWidget
{
    Q_OBJECT
public:
    messageItem(bool isLeft,const Message& message);


private:
    bool isLeft;
};



///////////////////////////////////////////////////////////////
/// 消息体的实现
///////////////////////////////////////////////////////////////

//文本消息，文件消息，语音消息的消息体(要和图片消息区分开的根本原因原因是微信的图片发送不需要手动画图)
class MessageContentLabel:public QWidget
{
    Q_OBJECT
public:
    MessageContentLabel(const QString& text,model::MessageType messageType
                        ,bool isLeft,const QString& fileId,const QByteArray& content);
    void paintEvent(QPaintEvent* event) override;
    void mousePressEvent(QMouseEvent* event) override;
    void updateUI(const QString& fileId,const QByteArray& content);
    void saveAsFile(const QByteArray& fileContent);
    void playSpeech(const QByteArray& speechContent);
    void speechPlayDone();
    void contextMenuEvent(QContextMenuEvent* event) override;
    void rightClicked();
    void speechConvertText(const QString& fileId,const QString& content);

//private:
    QLabel* label;
    model::MessageType messageType;
    bool isLeft;
    QString fileId;
    QByteArray content;

    bool isLoadContentDone;
};

//图片消息的消息体
class MessageImageLabel:public QWidget
{
    Q_OBJECT
public:
    MessageImageLabel(bool isLeft,const QString& fileId,const QByteArray& content);
    void updateUI(const QString& fileId,const QByteArray& content);
    void paintEvent(QPaintEvent* event) override;
private:
    bool isLeft;
    QString fileId;
    QByteArray content;

    QPushButton* imageBtn;
};


#endif // MESSAGESHOWAREA_H
